#ifndef PLAIN_BOX_MODEL_CREATOR_H_JM_20120702
#define PLAIN_BOX_MODEL_CREATOR_H_JM_20120702
/**
 * @file PlainBoxModelCreator.h
 * Sablona pre generovanie jednoduchych tvorcov modelov boxov.
 **/

// ##
#include "BoxModelCreator.h"

namespace jm4bbx {

/**
 * Sablona pre zakladneho tvorcu boxov. Vo vacsine pripadov tvorca preda 
 * parametre konstruktoru modelu boxu a vrati model. Pre tieto pripady je mozne
 * pouzit tuto sablonu, z ktorej je mozne vygenerovat takehoto tvorcu pre 
 * lubovolny model boxu.
 * 
 * Vyuzity v makre {@link REGISTER_BOX_TO_RUNTIME} resp. 
 * {@link REGISTER_BOX_TO_RUNTIME_SPECIFIC}.
 * 
 * @tparam ModelType Typ modelu box.
 * 
 **/
template<class BoxType>
class PlainBoxModelCreator : public BoxModelCreator {
public:
	/**
	 * Typ vytvaraneho modelu boxu.
	 **/
	typedef BoxType BoxType;

	bobox::box_model_ptr_type createBox(bobox::box_model_id_type id, 
		bobox::box_tid_type tid, bobox::runtime* rt, 
		const bobox::parameters &params) override {

			return  bobox::box_model_ptr_type(
				new GenericBoxModel<BoxType>(BoxParameterPack(id, tid, rt, params)));
	}

};

}


#endif
